package com.gitee.sparta.core.process.operate;

import com.gitee.sparta.core.bean.metadata.Metadata;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 针对 metadata_tab 中进行操作
 *
 * @author zyred
 * @since v 0.0.1
 * @param <V>
 */
public interface MetadataTabOperate<V> {

    /**
     * 根据完整的 topic 查询 metadata 内容
     *
     * @param fullTopic     完整的 topic， topic:metaId
     * @return              {metadata}
     */
    Metadata<V> readMetadata (String fullTopic);

    /**
     * 用户自定义删除内容
     * 将会删除 readable_tab timeout_tab metadata_tab 是按顺序进行删除的
     *
     * @param readableTabKey    readable_tab key
     * @param timeoutTabKey     timeout_tab key
     * @param metadataTabKey    metadata_tab key
     * @param segmentFields     分段 topic:metaId-0,topic:metaId-1,....
     * @param field             metadata_tab 中的 topic
     */
    void delete(String readableTabKey, String timeoutTabKey, String metadataTabKey, String segmentFields, String field);

    /**
     * 读取所有的 metadataTopics 对应的数据，并序列化成 metadata
     *
     * @param listenTopic           @SpartaListener 注解中 topics 属性值
     * @return                      metadata
     */
    Map<String, Metadata<V>> readMetadataMap(String listenTopic);


    /**
     * 读取并且删除 metadata 中的数据
     *
     * @param fieldName 完整的元数据 key
     * @return  元数据
     */
    Metadata<V> readDelMetadata (String fieldName);
}
